iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Software Development

30天收斂後端開發心法系列 第 6

30天收斂後端開發心法 - (6) 淺談測試

  • 分享至 

  • xImage
  •  

什麼是測試?

對我而言,測試就是撰寫測試程式,來執行你寫好的程式碼,並比對執行結果是否與預期相符。只要結果符合預期,就是一個成功的測試。

為什麼需要測試?

當專案剛開始開發時,如果養成撰寫測試的習慣,能夠大幅提升程式碼的可維護性。隨著專案擴大、不同開發者加入,測試可以幫助團隊快速掌握每個功能是否仍然正常,確保系統的穩定性。

我曾看過一個有趣的比喻:

專案就像人類,測試就像健康檢查。
如果能夠及早發現問題,就可以在疾病擴大前進行治療,避免未來積累過多的技術債。

在現代開發流程中,CI/CD(持續整合與持續部署)幾乎是團隊必備的流程之一。將自動化測試整合進 CI 流程,可以在程式碼進入測試或正式環境前,自動檢查錯誤,有效提升開發效率與信心。

如何在 Laravel 中撰寫測試?

Laravel 內建了完整的測試框架(基於 PHPUnit),讓我們能夠輕鬆撰寫測試。

先使用 Artisan 指令建立一支測試:
php artisan make:test DemoTest
接著會在 tests/Feature 目錄下產生一個測試檔案 DemoTest.php,預設內容如下:

namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class DemoTest extends TestCase
{
    /**
     * A basic feature test example.
     */
    public function testExample()
    {
        $response = $this->get('/');
        $response->assertStatus(200);
    }
}

這段程式碼會發送一個 GET 請求到首頁 /,並斷言(assert)回應的 HTTP 狀態碼為 200。如果成功,代表這條路由回應正常。

執行測試:

php artisan test
這個指令會執行 tests/ 資料夾中的所有測試。

那麼,什麼是 php artisan test

Laravel 自 v7 開始,預設提供了 php artisan test 指令,作為執行測試的主要入口。這個指令其實是對 phpunit 的包裝,並提供了更美觀的輸出與更好的 Laravel 整合體驗。

你也可以直接使用:

vendor/bin/phpunit
兩者功能基本一致,只是 php artisan test 更適合 Laravel 專案使用,特別是在開發階段。

Feature Test vs Unit Test 有什麼不同?

Feature Test(功能測試)

Feature Test 是測試整體流程的方式,常見的作法是:

  • 發送 HTTP 請求(如 GET/POST)
  • 檢查回應的內容、狀態碼、驗證錯誤等
  • 適合用來測試 API 或頁面流程
    範例:
public function test_user_can_login()
{
    $response = $this->post('/login', [
        'email' => 'test@example.com',
        'password' => 'password',
    ]);

    $response->assertStatus(200);
}

Unit Test(單元測試)

Unit Test 著重在單一方法或類別的邏輯正確性,通常不經過路由與 HTTP 請求,而是直接呼叫方法、注入參數並斷言結果。

範例:

public function test_sum_function_returns_correct_result()
{
    $service = new MathService();

    $result = $service->sum(2, 3);
    $this->assertEquals(5, $result);
}

簡單來說:

項目Feature TestUnit Test測試範圍API/流程級別函式/類別級別執行方式模擬使用者操作、送出 HTTP 請求直接呼叫方法效能較慢(涉及資料庫、HTTP)較快(純邏輯)使用目的驗證整體功能是否正確驗證邏輯是否正確

補充:測試覆蓋率一定要 100% 嗎?

這是開發圈長期的爭論議題。理論上 100% 覆蓋率可以讓你更有信心系統沒問題,但現實是:

時間有限,開發優先
不見得每個程式都值得測試(例如:簡單轉換器、極少變動邏輯)
因此,測試應該以風險導向為原則,優先針對關鍵邏輯、易變功能進行測試。

小結

Laravel 提供完整的測試支援,從 Unit Test 到 Feature Test,搭配 php artisan test 就能快速開發與驗證功能。
測試不只是為了讓 CI/CD 順利,更是為了團隊開發能更穩健地前進。


上一篇
30天收斂後端開發心法 - (5) Queue 是什麼?Job 又是什麼?
下一篇
30天收斂後端開發心法 - (7) php artisan command
系列文
30天收斂後端開發心法30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言